/**
 * 数据源接口
 * 
 * 用途：定义统一的数据源接口，支持蓝牙数据的获取和管理
 * 方法：提供标准化的数据获取、连接管理和状态监听接口
 * 原理：使用接口抽象，实现数据源的解耦，便于后续扩展和替换
 */
package com.example.brain_wave.data

import com.example.brain_wave.ui.components.BrainWaveDataPoint

/**
 * 数据源状态
 */
enum class DataSourceState {
    IDLE,           // 空闲状态
    CONNECTING,     // 连接中
    CONNECTED,      // 已连接
    COLLECTING,     // 数据采集中
    DISCONNECTED,   // 已断开
    ERROR           // 错误状态
}

/**
 * 数据源接口
 */
interface DataSourceInterface {
    
    /**
     * 初始化数据源
     */
    fun initialize(config: Map<String, Any>)
    
    /**
     * 开始连接
     */
    suspend fun connect(): Boolean
    
    /**
     * 断开连接
     */
    suspend fun disconnect()
    
    /**
     * 开始数据采集
     */
    fun startDataCollection()
    
    /**
     * 停止数据采集
     */
    fun stopDataCollection()
    
    /**
     * 获取当前状态
     */
    fun getCurrentState(): DataSourceState
    
    /**
     * 检查是否已连接
     */
    fun isConnected(): Boolean
    
    /**
     * 检查是否正在采集数据
     */
    fun isCollecting(): Boolean
    
    /**
     * 设置状态变化回调
     */
    fun setOnStateChanged(callback: (DataSourceState) -> Unit)
    
    /**
     * 设置数据点生成回调
     */
    fun setOnDataPointGenerated(callback: (BrainWaveDataPoint) -> Unit)
    
    /**
     * 设置错误回调
     */
    fun setOnError(callback: (String) -> Unit)
    
    /**
     * 清理资源
     */
    fun cleanup()
}